package com.uniandes.edu.co.controlador;

import java.util.List;

import com.uniandes.edu.co.anotaciones.LogT;
import com.uniandes.edu.co.anotaciones.LogsT;
import com.uniandes.edu.co.dto.Persona;
import com.uniandes.edu.co.excepciones.ExcepcionExiste;
import com.uniandes.edu.co.excepciones.ExcepcionVacio;
import com.uniandes.edu.co.procesar.persona.ProcesarPersona;


public class ControladorPersona {
	static private ControladorPersona solitario = null;

    static public ControladorPersona getSingleton() {
        if (solitario == null) {
            solitario = new ControladorPersona();
        }
        return solitario;
    }
    
   
    /**
     * metodo encargado de realizar las validaciones cuando
     * se va a agregar una nueva persona
     */
    @LogsT({@LogT(taskId=10, idPersona=20112, idCiclo=2, date="20/03/2011", min=36, porcentajeRealValorGanado=100)})
    public void agregarPersona(String idPersona, String nomPersona, 
    		String rolPersona, List <Persona> lPersona)throws ExcepcionVacio,
    		ExcepcionExiste{
    	if(idPersona.equals("")||nomPersona.equals("")||rolPersona.equals("")){
    		throw new ExcepcionVacio("Existen datos vacios");
    	}
    	if(ProcesarPersona.getSingleton().consultarPersona(idPersona, lPersona)!=null){
    		throw new ExcepcionExiste("El id de la persona ya existe");
    	}
    	/*if(ProcesarPersona.getSingleton().consultarPersonaNombre(nomPersona, lPersona)!=null){
    		throw new ExcepcionExiste("Ya existe una persona en el sistema con ese nombre");
    	}*/
    	ProcesarPersona.getSingleton().agregarPersona(idPersona, nomPersona, rolPersona, lPersona);
    }
   
    /**
     * metodo encargado de realizar las validaciones cuando
     * se va a modificar una persona
     */
    @LogsT({@LogT(taskId=10, idPersona=20112, idCiclo=2, date="20/03/2011", min=54, porcentajeRealValorGanado=100)})
    public void modificarPersona(String idPersona, String nomPersona, 
    		String rolPersona, List <Persona> lPersona)throws ExcepcionVacio, ExcepcionExiste{
    	if(idPersona.equals("")||nomPersona.equals("")||rolPersona.equals("")){
    		throw new ExcepcionVacio("Existen datos vacios");
    	}
    	/*if(ProcesarPersona.getSingleton().consultarPersonaNombre(nomPersona, lPersona)!=null){
    		throw new ExcepcionExiste("Ya existe una persona en el sistema con ese nombre");
    	}*/
    	ProcesarPersona.getSingleton().modificarPersona(idPersona, nomPersona, rolPersona, lPersona);
    }

    /**
     * metodo encargado de realizar las validaciones cuando
     * se va a eliminar una persona
     */
    @LogsT({@LogT(taskId=10, idPersona=20112, idCiclo=2, date="20/03/2011", min=33, porcentajeRealValorGanado=100)})
    public void eliminarPersona(String idPersona, 
    		List <Persona> lPersona)throws ExcepcionVacio{
    	if(idPersona.equals("")){
    		throw new ExcepcionVacio("Existen datos vacios");
    	}
    	ProcesarPersona.getSingleton().eliminarPersona(idPersona, lPersona);
    }

    /**
     * metodo encargado de realizar las validaciones cuando
     * se va a consultar una persona
     */
    @LogsT({@LogT(taskId=10, idPersona=20112, idCiclo=2, date="20/03/2011", min=21, porcentajeRealValorGanado=100)})
    public Persona consultarPersona(String idPersona, 
    		List <Persona> lPersona)throws ExcepcionVacio{
    	Persona persona=null;
    	if(idPersona.equals("")){
    		throw new ExcepcionVacio("Existen datos vacios");
    	}
    	persona=ProcesarPersona.getSingleton().consultarPersona(idPersona, lPersona);
    	return persona;
    }
    
    @LogsT({@LogT(taskId=10, idPersona=20112, idCiclo=2, date="20/03/2011", min=29, porcentajeRealValorGanado=100)})
    public Persona consultarPersonaNombre(String nomPersona, 
    		List <Persona> lPersona)throws ExcepcionVacio{
    	Persona persona=null;
    	if(nomPersona.equals("")){
    		throw new ExcepcionVacio("Existen datos vacios");
    	}
    	persona=ProcesarPersona.getSingleton().consultarPersonaNombre(nomPersona, lPersona);
    	return persona;
    }
}
